<?php

class Eventos {

    private $mesExtenso = array(
        '1' => 'Janeiro',
        '2' => 'Fevereiro',
        '3' => 'Março',
        '4' => 'Abril',
        '5' => 'Maio',
        '6' => 'Junho',
        '7' => 'Julho',
        '8' => 'Agosto',
        '9' => 'Setembro',
        '10' => 'Outubro',
        '11' => 'Novembro',
        '12' => 'Dezembro',
    );
    private $data_atual = "CURDATE()";
    private $link_atual = "CURDATE()";

    public function executa() {

        try {
            $pdo = Conexao::open('site');
            if (isset($_GET['data']) && (!empty($_GET['data']))) {
                $data = ($_GET['data'] != 'CURDATE()') ? "'" . $_GET['data'] . "'" : $_GET['data'];
                if ($_GET['op'] == 'proximo') {
                    $consultaData = $pdo->prepare("SELECT  date_add({$data}, interval 1 month)  as data_atual, DATE_FORMAT(date_add({$data}, interval 1 month), '%Y-%m-%d') as link");
                } elseif ($_GET['op'] == 'anterior') {
                    $consultaData = $pdo->prepare("SELECT  date_sub({$data}, interval 1 month)  as data_atual, DATE_FORMAT(date_sub({$data}, interval 1 month), '%Y-%m-%d') as link");
                }
                $consultaData->execute();
                $this->setDataAtual($consultaData->fetch(PDO::FETCH_ASSOC));
            }
            $consultaMesAtual = $pdo->prepare("SELECT DATE_FORMAT({$this->data_atual}, '%m') as data_atual");
            $consultaMesAtual->execute();
            $mesAtual = $consultaMesAtual->fetch(PDO::FETCH_ASSOC);
            $sql = "SELECT 
                        eventos.evento,
                        MONTH(eventos.data) as mes,
                        eventos.site
                        
                    FROM 
                        eventos
                    WHERE 
                        ativo = TRUE
                        AND DATE_FORMAT(eventos.data, '%m/%Y') = DATE_FORMAT({$this->data_atual}, '%m/%Y')
                    ORDER BY 
                        data ASC";
            $consultaEventos = $pdo->prepare($sql);
            $consultaEventos->execute();
            $dados = $consultaEventos->fetchAll(PDO::FETCH_ASSOC);
            $ind = $this->mesAtual();
            $retorna = "<h2 style=\"font-size: 30px;\">Eventos de " . $this->mesExtenso[$ind] . " de " . $this->mesAtual(true) . "</h2>";
            $i = 0;
            if ($consultaEventos->rowCount() > 0) {
                foreach ($dados as $dado) {
                    if($i == 0) {
                        $retorna .= "<div class='row'>";
                    }

                    $retorna .= "<div class=\"col-3\">";
                    $retorna .= "<ul>";
                    $retorna .= "<li><strong>Evento: </strong>" . $dado['evento'] . "</li>
                            <li><strong>Mês: </strong>" . $this->mesExtenso[$dado['mes']] . "</li>";
                    $retorna .= (!empty($dado['site'])) ? "<li><strong>Site: </strong><a class='eventos-link'  href='http://" . $dado['site'] . "' target='_blank'>Acesse o site</a></li>" : "<li><strong>Site: </strong> Não disponível</li>";
                    $retorna .= "</ul>";
                    $retorna .= "</div>";
                    if($i == 2) {
                        $retorna .= "</div>";
                        $i=0;
                    } else {
                        $i++;                        
                    }
                }
                    if($i != 0){
                        $retorna .= "</div>";
                    }
            } else {
                $retorna .= "<div class=\"col-1\">";
                $retorna .= "<ul>";
                $retorna .= "<li>Não há eventos nesse mês.</li>";
                $retorna .= "</ul>";
                $retorna .= "</div>";
            }
            $retorna .= "<div class=\"col-1 row\"><div class=\"paginacao\"><ul>";

//            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=anterior&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title=''>Mês Anterior</a></li>";
//            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=proximo&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title=''>Próximo Mês</a></li>";
//            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=anterior&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title=''>" . $this->mesTitle('anterior') . "</a></li>";
//            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=proximo&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title=''>" . $this->mesTitle('proximo') . "</a></li>";
            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=anterior&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title='Anterior (" . $this->mesTitle('anterior') . ")'>«</a></li>";
            $retorna .= "<li><a onclick=\"$('#eventos').load('acao.php?acao=getEventos&amp;op=proximo&amp;data={$this->link_atual}'); Menu.slide('#eventos');\" href=\"javascript:;\" title='Próximo (" . $this->mesTitle('proximo') . ")'>»</a></li>";

            $retorna .= "</ul></div></div>";

            return $retorna;
        } catch (PDOException $e) {
            new Excecao($e);
        }
    }

    public function setDataAtual($data) {
        if (is_array($data)) {
            $this->data_atual = "'{$data['data_atual']}'";
            $this->link_atual = $data['link'];
        } else {
            $this->data_atual = "'{$data}'";
        }
    }

    private function mesAtual($Y = false) {
        if ($this->data_atual == 'CURDATE()') {
            $dt = date("m");
            $ano = date('Y');
        } else {
            $dat = explode("-", $this->data_atual);
            $dt = $dat[1];
            $ano = str_replace("'", "", $dat[0]);
        }
        return ($Y) ? $ano : intval($dt);
    }

    private function mesTitle($op) {
        $data = ($this->link_atual == 'CURDATE()') ? $data = date("Ymd") : str_replace('-', '', $this->link_atual);
        switch ($op) {
            case 'anterior':
                $somaData = $this->substraiDias($data, '30');
                break;
            case 'proximo':
                $somaData = $this->somaDias($data, '30');
                break;
            default:
                break;
        }
        $ind = explode('-', $somaData);
        $indiceMes = intval($ind[1]);
        $mesExt = array(
            '1' => 'Jan',
            '2' => 'Fev',
            '3' => 'Mar',
            '4' => 'Abr',
            '5' => 'Mai',
            '6' => 'Jun',
            '7' => 'Jul',
            '8' => 'Ago',
            '9' => 'Set',
            '10' => 'Out',
            '11' => 'Nov',
            '12' => 'Dez',
        );
        $mes = $this->mesExtenso[$indiceMes];
        $ano = $ind[0];
        return $mes ;
    }

    private function somaDias($date, $days) {
        $thisyear = substr($date, 0, 4);
        $thismonth = substr($date, 4, 2);
        $thisday = substr($date, 6, 2);
        $nextdate = mktime(0, 0, 0, $thismonth, $thisday + $days, $thisyear);
        return strftime("%y-%m-%d", $nextdate);
    }

    private function substraiDias($date, $days) {
        $thisyear = substr($date, 0, 4);
        $thismonth = substr($date, 4, 2);
        $thisday = substr($date, 6, 2);
        $nextdate = mktime(0, 0, 0, $thismonth, $thisday - $days, $thisyear);
        return strftime("%y-%m-%d", $nextdate);
    }

}
